<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  
  <title>LIO | Matrix207&#39;s Blog</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <meta name="description" content="历史
Linux 2.6.38 为分界线，此前的标准是 Linux SCSI Target , STGT 之后迄今为止的标准是 Linux-IO Target , LIO 确切的说 Linus Torvalds 在 2011年1月15日将LIO SCSI Target engine merge 到 Linux 2.6.38 中
暂时使用LIO作为IET替代，因为IET当前已不更新，最新版2010年">
<meta property="og:type" content="article">
<meta property="og:title" content="LIO">
<meta property="og:url" content="http://yoursite.com/2014/11/26/lio/index.html">
<meta property="og:site_name" content="Matrix207's Blog">
<meta property="og:description" content="历史
Linux 2.6.38 为分界线，此前的标准是 Linux SCSI Target , STGT 之后迄今为止的标准是 Linux-IO Target , LIO 确切的说 Linus Torvalds 在 2011年1月15日将LIO SCSI Target engine merge 到 Linux 2.6.38 中
暂时使用LIO作为IET替代，因为IET当前已不更新，最新版2010年">
<meta property="og:updated_time" content="2016-07-17T14:33:55.000Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="LIO">
<meta name="twitter:description" content="历史
Linux 2.6.38 为分界线，此前的标准是 Linux SCSI Target , STGT 之后迄今为止的标准是 Linux-IO Target , LIO 确切的说 Linus Torvalds 在 2011年1月15日将LIO SCSI Target engine merge 到 Linux 2.6.38 中
暂时使用LIO作为IET替代，因为IET当前已不更新，最新版2010年">
  
    <link rel="alternate" href="/atom.xml" title="Matrix207&#39;s Blog" type="application/atom+xml">
  
  
    <link rel="icon" href="/favicon.png">
  
  
    <link href="//fonts.googleapis.com/css?family=Source+Code+Pro" rel="stylesheet" type="text/css">
  
  <link rel="stylesheet" href="/css/style.css">
  

</head>

<body>
  <div id="container">
    <div id="wrap">
      <header id="header">
  <div id="banner"></div>
  <div id="header-outer" class="outer">
    <div id="header-title" class="inner">
      <h1 id="logo-wrap">
        <a href="/" id="logo">Matrix207&#39;s Blog</a>
      </h1>
      
    </div>
    <div id="header-inner" class="inner">
      <nav id="main-nav">
        <a id="main-nav-toggle" class="nav-icon"></a>
        
          <a class="main-nav-link" href="/">Home</a>
        
          <a class="main-nav-link" href="/archives">Archives</a>
        
      </nav>
      <nav id="sub-nav">
        
          <a id="nav-rss-link" class="nav-icon" href="/atom.xml" title="Flux RSS"></a>
        
        <a id="nav-search-btn" class="nav-icon" title="Rechercher"></a>
      </nav>
      <div id="search-form-wrap">
        <form action="//google.com/search" method="get" accept-charset="UTF-8" class="search-form"><input type="search" name="q" results="0" class="search-form-input" placeholder="Search"><button type="submit" class="search-form-submit">&#xF002;</button><input type="hidden" name="sitesearch" value="http://yoursite.com"></form>
      </div>
    </div>
  </div>
</header>
      <div class="outer">
        <section id="main"><article id="post-lio" class="article article-type-post" itemscope itemprop="blogPost">
  <div class="article-meta">
    <a href="/2014/11/26/lio/" class="article-date">
  <time datetime="2014-11-25T16:00:00.000Z" itemprop="datePublished">2014-11-26</time>
</a>
    
  <div class="article-category">
    <a class="article-category-link" href="/categories/storage/">storage</a>
  </div>

  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 class="article-title" itemprop="name">
      LIO
    </h1>
  

      </header>
    
    <div class="article-entry" itemprop="articleBody">
      
        <h4 id="历史"><a href="#历史" class="headerlink" title="历史"></a>历史</h4><ul>
<li>Linux 2.6.38 为分界线，此前的标准是 Linux SCSI Target , STGT 之后迄今为止的<br>标准是 Linux-IO Target , LIO 确切的说 Linus Torvalds 在 2011年1月15日将<br>LIO SCSI Target engine merge 到 Linux 2.6.38 中</li>
<li>暂时使用LIO作为IET替代，因为IET当前已不更新，最新版2010年。而LIO已进入内核，<br>怎么说这几年应该都会持续发展,属于主流应用。</li>
</ul>
<h4 id="LIO代码量"><a href="#LIO代码量" class="headerlink" title="LIO代码量"></a>LIO代码量</h4><ul>
<li><code>/home/dennis/work/kernel/linux-3.2.63/drivers/target</code></li>
<li><code>[dennis@localhost target]$ find ./* -name &quot;*.*&quot; |xargs wc -l |awk &#39;END{print $1}&#39;</code><br>52187  </li>
<li><code>[dennis@localhost target]$ find iscsi/ -name &quot;*.*&quot; |xargs wc -l |awk &#39;END{print $1}&#39;</code><br>21801  </li>
</ul>
<h4 id="开源iSCSI-Target调研"><a href="#开源iSCSI-Target调研" class="headerlink" title="开源iSCSI Target调研"></a>开源iSCSI Target调研</h4><ul>
<li>SCST与LIO  <ul>
<li>SCST是一个相对较早且比较成熟的SCSI Target开源实现。  </li>
<li>LIO相比SCST是一个更晚的SCSI Target开源实现，但在与SCST竞争进入Linux内核中，<br>却以LIO胜出告终。关于二者之间进入Linux内核时的争论，LWN上一篇很 有趣的文章，<br>A tale of two SCSI Targets，中文翻译为“SCSI Target之 双城记”。  </li>
<li>虽然LIO因为进入Linux内核而有了更好的发展前景，但SCST也不差，Fusion-io 公司<br>刚刚收购了SCST的商业支持公司ID7。</li>
</ul>
</li>
<li>Tgt  <ul>
<li>Tgt也是一个通用的SCST Target开源实现，与前两者不同的是，在支持iSCSI协 议上，<br>Tgt的所有代码是完全工作在用户态的。  </li>
<li>Tgt将LU视为backstore，支持backstore可以模块化，也就是说，你可以写一个模块来<br>支持你自己定义的LU。Tgt提供了多线程api接口，使得编写backstore时 ，可以使用多<br>个线程同时处理SCSI请求。  </li>
<li>Tgt的主线程使用epoll LT模型，监听并接收Initiator发来<br>的读写请求与命令 ，而调用对应的backstore处理模块。</li>
</ul>
</li>
<li>iSCSI Target支持LU是分布式文件系统时的优化  <ul>
<li>iSCSI Target与LU之间支持多连接并发读写请求，对于不要求排序的SCSI命令与数据，可以并发发给LU  </li>
<li>iSCSI Target对SCSI命令与数据进行合并，然后发给LU。  </li>
</ul>
</li>
<li>比较  <ul>
<li>无论是SCST还是LIO，我都不认为它们是支持分布式文件系统的最佳选择。<br>首先，它们都是工作在内核态的，一旦出问题，会导致系统挂掉，直接影响跑在系统上的其他线上服务。<br>其次，SCSI与LIO作为通用的SCSI Target实现，在处理完iSCSI协议后，会把SCSI的<br>处理交给内核SCSI Driver去处理，这对支持分布式文件做二次开发来说，相对更加困难。</li>
<li>LIO对于一个LU，分配一个recv线程与一个send线程，recv线程接收Initiator发来的<br>iSCSI PDU，解析成SCSI请求后交给send线程，send线程将请求发给LU，并将LU返回<br>的结果返回给Initiator。对于LU是分布式文件系统时，一个send线程的框架让支持<br>iSCSI Target与LU之间多连接并发读写相对比较困难。而且LIO对iSCSI协议的支持，<br>很难针对LU是分布式文件系统做优化。LIO的send线程 与recv线程使用一个队列进行<br>通信，该队列中的SCSI请求，有些不关心顺序，有些却关心，这些都是在send线程遍<br>历队列时才进行处理的。如果要支持LU的多连接并发读写，需要额外的队列来维护SCSI<br>请求，这个队列对SCSI请求到达LU的顺序没有要求。当然，也要额外支持多线程等处理。</li>
<li>Tgt由于工作在用户态，没有缺点1，而且Tgt的backstore可以模块化，开发起来非常方便，<br>同时backstore支持多线程处理，而且Tgt交给backstore的多线程处理的 list已经对顺序不作要求了。</li>
<li>从以上分析来看，使用Tgt让分布式文件系统支持iSCSI更加有优势，而且更加方便。<br>目前，开源分布式存储项目sheepdog与hlfs都是基于Tgt开发模块来支持 iSCSI协议的。</li>
</ul>
</li>
<li>Tgt的缺点与改进<ul>
<li>Tgt的backstore在使用多线程时，多个线程竞争一个list，开销较大。可以让 每个线程维护<br>一个list，主线程通过CAS无锁队列的方式，将SCSI请求根据rr算 法加入到每个线程的list中。</li>
<li>Tgt的backstore与LU之间连接数与线程数，是1：1关系，且线程数为4，写死了的。<br>可以修改代码，将连接数改为可配置的。</li>
<li>Tgt使用一个主线程通过epoll接受所有Initiator的读写请求，当登陆的Initiator较多时，<br>这里可能成为瓶颈。通常来说，这不是问题，因为会iSCSI Target会部署多个的。</li>
</ul>
</li>
</ul>
<h3 id="targetcli"><a href="#targetcli" class="headerlink" title="targetcli"></a>targetcli</h3><ul>
<li>root权限运行targetcli</li>
<li>浏览存储对象, ls查看目录树信息，cd到执行目录</li>
<li>创建文件存储对象<ul>
<li>cd /backstores/fileio</li>
<li>create disk0 /tmp/disk0.img 10MB</li>
<li>cd /backstores/ramdisk</li>
<li>create rd0 10MB</li>
</ul>
</li>
<li>创建iSCSI目标<ul>
<li>cd /iscsi </li>
<li>create [这里可以加入自定义的WWN:WorldWide Name]</li>
<li>cd iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.6b448471ba5e/tpg1/</li>
<li>luns/ create /backstores/fileio/disk0</li>
<li>luns/ create /backstores/ramdisk/rd0</li>
<li>portals/ create 0.0.0.0 </li>
<li>set attribute authentication=0 demo_mode_write_protect=0 generate_node_acls=1 cache_dynamic_acls=1</li>
<li>cd /</li>
<li>ls</li>
<li>saveconfig</li>
</ul>
</li>
<li>当使用targetcli操作完毕后，记得使用saveconfig来保存配置，要不然重启target服务后，<br>刚才的配置将丢失.  <code>targetcli saveconfig</code><br>Last 10 configs saved in /etc/target/backup.<br>Configuration saved to /etc/target/saveconfig.json</li>
<li>启动iscsi target服务<ul>
<li>[root@localhost ~]# service target start </li>
<li>[root@localhost ~]# service target status</li>
</ul>
</li>
<li>装载iSCSI Target <ul>
<li>[root@localhost ~]# iscsiadm -m discovery -t sendtargets -p 127.0.0.1<br>127.0.0.1:3260,1 iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.6b448471ba5e</li>
<li>[root@localhost ~]# iscsiadm –mode node \  <blockquote>
<p>–targetname iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.6b448471ba5e \<br>–portal 127.0.0.1 –login</p>
</blockquote>
</li>
<li>上面的命令还可以使用简写模式: iscsiadm -m node -T \<blockquote>
<p>iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.6b448471ba5e \<br>-p 127.0.0.1 -l</p>
</blockquote>
</li>
<li>[root@localhost dennis]# lsscsi<br>[2:0:0:0]    disk    ATA      ST3160815AS      A     /dev/sda<br>[6:0:0:0]    disk    LIO-ORG  disk0            4.0   /dev/sdb<br>[6:0:0:1]    disk    LIO-ORG  rd0              4.0   /dev/sdc  </li>
</ul>
</li>
<li>卸载并删除iSCSI目标<ul>
<li>iscsiadm –mode node –targetname iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.6b448471ba5e –portal 127.0.0.1 –logout</li>
<li>或简写: iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.6b448471ba5e -p 127.0.0.1 -u</li>
<li>targetcli iscsi/ delete iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.6b448471ba5e </li>
</ul>
</li>
<li>Other operation<ul>
<li>iscsiadm –mode node -U all</li>
<li>iscsiadm –mode node -o delete</li>
<li>iscsiadm –mode node</li>
</ul>
</li>
</ul>
<h3 id="测试脚本"><a href="#测试脚本" class="headerlink" title="测试脚本"></a>测试脚本</h3><pre><code>mkdir -p /lio/
targetcli /backstores/fileio create disk0 /lio/disk0.img 1024MB
targetcli /iscsi create iqn.2007-10.lio.com:lio.test
targetcli /iscsi/iqn.2007-10.lio.com:lio.test/tpg1/luns/ create /backstores/fileio/disk0
targetcli /iscsi/iqn.2007-10.lio.com:lio.test/tpg1/portals/ create 0.0.0.0 
targetcli /iscsi/iqn.2007-10.lio.com:lio.test/tpg1 set attribute authentication=1 demo_mode_write_protect=0 generate_node_acls=1 cache_dynamic_acls=1
targetcli /iscsi/iqn.2007-10.lio.com:lio.test/tpg1/acls/ create iqn.2007-10.lio.com:acl01
targetcli /iscsi/iqn.2007-10.lio.com:lio.test/tpg1/acls/iqn.2007-10.lio.com:acl01/ set auth userid=dennis
targetcli /iscsi/iqn.2007-10.lio.com:lio.test/tpg1/acls/iqn.2007-10.lio.com:acl01/ set auth password=Dennis@123456
targetcli saveconfig
</code></pre><h3 id="其他操作"><a href="#其他操作" class="headerlink" title="其他操作"></a>其他操作</h3><ul>
<li><p>增加本地监听ip地址和端口</p>
<p>  /iscsi/iqn.20…/tpg1/portals&gt; create 172.16.110.11 8089<br>  Created network portal 172.16.110.11:8089.<br>  /iscsi/iqn.20…/tpg1/portals&gt; ls<br>  o- portals …………………………………………… [Portals: 2]</p>
<pre><code>o- 0.0.0.0:3260 .................................................... [OK]
o- 172.16.110.11:8089 .............................................. [OK]
</code></pre><p>  /iscsi/iqn.20…/tpg1/portals&gt; status<br>  Status for /iscsi/iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.6b448471ba5e/tpg1/portals: Portals: 2</p>
</li>
<li><p>Initiator访问IP限制? 目前找不到方法！原来的IET有限制指定IP访问的功能，但是并不表示<br>该功能是iscsi协议必须实现的，所以现在的LIO没有这样的功能也是合理的。</p>
</li>
<li><p>如何设置块设备的IO模式为write-back或write-through? 目前找不到方法。对于FILEIO是可以的.</p>
<p>  [root@localhost src]# targetcli /backstores/fileio/ create fileio01.dat /tmp/fileio01.dat 10M write_back=False<br>  Created fileio fileio01.dat with size 10485760<br>  [root@localhost src]# ls /tmp/fileio01.dat -lh<br>  -rw-r–r–. 1 root root 10M Feb  3 15:01 /tmp/fileio01.dat<br>  [root@localhost src]# targetcli /backstores/fileio/ ls<br>  o- fileio ……………………………………………… [Storage Objects: 1]<br>  o- fileio01.dat ………….. [/tmp/fileio01.dat (10.0MiB) write-thru deactivated]<br>  [root@localhost src]# targetcli /backstores/fileio/ create fileio02.dat /tmp/fileio02.dat 10M write_back=True<br>  Created fileio fileio02.dat with size 10485760<br>  [root@localhost src]# targetcli /backstores/fileio/ ls<br>  o- fileio ……………………………………………… [Storage Objects: 2]<br>  o- fileio01.dat ………….. [/tmp/fileio01.dat (10.0MiB) write-thru deactivated]<br>  o- fileio02.dat ………….. [/tmp/fileio02.dat (10.0MiB) write-back deactivated]  </p>
</li>
<li><p>targetcli 设置CHAP登陆: acls中创建wwn, 设置用户名和密码</p>
<ul>
<li>/&gt; cd /iscsi/iqn.2007-10.lio.com:dg2.lv1/tpg1/</li>
<li>set attribute authentication=1</li>
<li>acls/ create iqn.1991-05.com.microsoft:ibm-t410s </li>
<li>cd acls/iqn.1991-05.com.microsoft:ibm-t410s</li>
<li>set auth userid=iqn.1991-05.com.microsoft:ibm-t410s</li>
<li>set auth password=mytargetsecret</li>
<li>saveconfig</li>
<li><p>reference <a href="http://linux-iscsi.org/wiki/ISCSI" target="_blank" rel="external">http://linux-iscsi.org/wiki/ISCSI</a></p>
<p>[root@localhost dennis]# iscsiadm -m node -p 172.16.130.200 -l<br>Logging in to [iface: default, target: iqn.2007-10.lio.com:dg2.lv1, portal: 172.16.130.200,3260] (multiple)<br>iscsiadm: Could not login to [iface: default, target: iqn.2007-10.lio.com:dg2.lv1, portal: 172.16.130.200,3260].<br>iscsiadm: initiator reported error (24 - iSCSI login failed due to authorization failure)<br>iscsiadm: Could not log into all portals</p>
</li>
</ul>
</li>
</ul>
<h3 id="配置检查"><a href="#配置检查" class="headerlink" title="配置检查"></a>配置检查</h3><ul>
<li><p>/sys/kernel/config/target/iscsi/ </p>
<p>  [root@localhost ~]# ls -l /sys/kernel/config/target/iscsi<br>  total 0<br>  drwxr-xr-x. 2 root root    0 Dec 15 15:59 discovery_auth<br>  drwxr-xr-x. 4 root root    0 Dec 15 15:58 iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.f264093a034e<br>  drwxr-xr-x. 4 root root    0 Dec 15 15:59 iqn.2014-12.org.linux-iscsi.localhost.x8664:sn.f3849a0b356e<br>  -r–r–r–. 1 root root 4096 Dec 15 16:05 lio_version</p>
</li>
<li><p>当使用targetcli操作完毕后，记得使用saveconfig来保存配置，要不然重启target服务后，<br>刚才的配置将丢失.</p>
<p>  [root@localhost ~]# targetcli saveconfig<br>  Last 10 configs saved in /etc/target/backup.<br>  Configuration saved to /etc/target/saveconfig.json</p>
</li>
<li><p>关于配置文件 /etc/target/saveconfig.json的解析</p>
<ul>
<li>JSON (JavaScript Object Notation) is a lightweight data-interchange format</li>
<li>JSON 一种轻量级的数据交换格式</li>
<li><a href="http://www.json.org/" target="_blank" rel="external">http://www.json.org/</a></li>
</ul>
</li>
</ul>
<h4 id="需要验证测试的特性"><a href="#需要验证测试的特性" class="headerlink" title="需要验证测试的特性"></a>需要验证测试的特性</h4><ul>
<li>各中类型的性能比较<ul>
<li>FILEIO 性能</li>
<li>Block 性能</li>
</ul>
</li>
<li>增加或删除不用的lun是否需要重启服务，会不会影响正常业务</li>
<li>破坏性测试<ul>
<li>块设备异常是否影响其他iscsi卷的业务</li>
</ul>
</li>
<li>相比IET，有哪些新特性</li>
<li>对比所有TARGET的开源实现，有哪些优势，有无缺点</li>
</ul>
<h4 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h4><ul>
<li><a href="https://www.ibm.com/developerworks/community/blogs/5144904d-5d75-45ed-9d2b-cf1754ee936a/entry/linux_io_target%e4%bb%8b%e7%bb%8d_%e4%b8%80?lang=en" target="_blank" rel="external">Linux-IO Target介绍(一)</a></li>
<li><a href="https://www.ibm.com/developerworks/community/blogs/5144904d-5d75-45ed-9d2b-cf1754ee936a/entry/april_11_2014_12_58_am?lang=en" target="_blank" rel="external">Linux-IO Target介绍(二)</a></li>
<li><a href="http://blog.csdn.net/load2006/article/details/18088445" target="_blank" rel="external">LIO target</a></li>
<li><a href="http://linux-iscsi.org/wiki/LIO" target="_blank" rel="external">LIO</a></li>
<li><a href="http://linux-iscsi.org/wiki/ISCSI" target="_blank" rel="external">ISCSI</a></li>
<li><a href="https://en.wikipedia.org/wiki/LIO_(SCSI_target" target="_blank" rel="external">LIO wikipedia</a>)</li>
<li><a href="http://linux-iscsi.org/wiki/Features" target="_blank" rel="external">Linux SCSI Target Features</a></li>
</ul>

      
    </div>
    <footer class="article-footer">
      <a data-url="http://yoursite.com/2014/11/26/lio/" data-id="ciqqpe1rs00bcnmpvpfgbw1je" class="article-share-link">Partager</a>
      
      
  <ul class="article-tag-list"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/iscsi/">iscsi</a></li></ul>

    </footer>
  </div>
  
    
<nav id="article-nav">
  
    <a href="/2014/12/04/ssd-cache-and-implementation/" id="article-nav-newer" class="article-nav-link-wrap">
      <strong class="article-nav-caption">Récent</strong>
      <div class="article-nav-title">
        
          ssd cache and implementation
        
      </div>
    </a>
  
  
    <a href="/2014/09/15/rapidly-method-for-clean-directory-with-rsync/" id="article-nav-older" class="article-nav-link-wrap">
      <strong class="article-nav-caption">Ancien</strong>
      <div class="article-nav-title">Rapidly method for clean directory with rsync</div>
    </a>
  
</nav>

  
</article>

</section>
        
          <aside id="sidebar">
  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Catégories</h3>
    <div class="widget">
      <ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/blog/">blog</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/database/">database</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/english/">english</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/kernel/">kernel</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/language/">language</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/linux/">linux</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/math/">math</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/network/">network</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/others/">others</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/person/">person</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/program/">program</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/source/">source</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/storage/">storage</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/tools/">tools</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/windows/">windows</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Mot-clés</h3>
    <div class="widget">
      <ul class="tag-list"><li class="tag-list-item"><a class="tag-list-link" href="/tags/FAQ/">FAQ</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/IRC/">IRC</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/Translation/">Translation</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/android/">android</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/api/">api</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/assembly/">assembly</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/awk/">awk</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/batch/">batch</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/blog/">blog</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/book/">book</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/c/">c</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/c/">c++</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/cache/">cache</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/crash/">crash</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/database/">database</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/debug/">debug</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/dot/">dot</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/driver/">driver</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/emacs/">emacs</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/exploit/">exploit</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/file-system/">file system</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/filesystem/">filesystem</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/flowchart/">flowchart</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/gcc/">gcc</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/git/">git</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/google/">google</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/graphviz/">graphviz</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/hexo/">hexo</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/hosts/">hosts</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/iscsi/">iscsi</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/java/">java</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/javascript/">javascript</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/job/">job</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/json/">json</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/kernel/">kernel</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/linux/">linux</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/lisp/">lisp</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/lua/">lua</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/makefile/">makefile</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/malloc/">malloc</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/math/">math</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/maxima/">maxima</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/memory/">memory</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/memory-overflow/">memory overflow</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/mtrace/">mtrace</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/netdisk/">netdisk</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/network/">network</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/others/">others</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/pandoc/">pandoc</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/performance/">performance</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/person/">person</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/protobuf/">protobuf</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/python/">python</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/rsync/">rsync</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/sed/">sed</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/shell/">shell</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/skype/">skype</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/sms/">sms</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/source/">source</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/ssh/">ssh</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/stack/">stack</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/storage/">storage</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/study/">study</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/svn/">svn</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/sync/">sync</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/test/">test</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/time/">time</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/tools/">tools</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/valgrind/">valgrind</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/vi/">vi</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/vim/">vim</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/virtual/">virtual</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/wget/">wget</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/windows/">windows</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/wireshark/">wireshark</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/write/">write</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/xml/">xml</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Nuage de mot-clés</h3>
    <div class="widget tagcloud">
      <a href="/tags/FAQ/" style="font-size: 10px;">FAQ</a> <a href="/tags/IRC/" style="font-size: 10px;">IRC</a> <a href="/tags/Translation/" style="font-size: 13px;">Translation</a> <a href="/tags/android/" style="font-size: 10px;">android</a> <a href="/tags/api/" style="font-size: 10px;">api</a> <a href="/tags/assembly/" style="font-size: 10px;">assembly</a> <a href="/tags/awk/" style="font-size: 11px;">awk</a> <a href="/tags/batch/" style="font-size: 14px;">batch</a> <a href="/tags/blog/" style="font-size: 10px;">blog</a> <a href="/tags/book/" style="font-size: 10px;">book</a> <a href="/tags/c/" style="font-size: 16px;">c</a> <a href="/tags/c/" style="font-size: 19px;">c++</a> <a href="/tags/cache/" style="font-size: 10px;">cache</a> <a href="/tags/crash/" style="font-size: 10px;">crash</a> <a href="/tags/database/" style="font-size: 17px;">database</a> <a href="/tags/debug/" style="font-size: 12px;">debug</a> <a href="/tags/dot/" style="font-size: 10px;">dot</a> <a href="/tags/driver/" style="font-size: 10px;">driver</a> <a href="/tags/emacs/" style="font-size: 11px;">emacs</a> <a href="/tags/exploit/" style="font-size: 10px;">exploit</a> <a href="/tags/file-system/" style="font-size: 10px;">file system</a> <a href="/tags/filesystem/" style="font-size: 12px;">filesystem</a> <a href="/tags/flowchart/" style="font-size: 10px;">flowchart</a> <a href="/tags/gcc/" style="font-size: 10px;">gcc</a> <a href="/tags/git/" style="font-size: 12px;">git</a> <a href="/tags/google/" style="font-size: 11px;">google</a> <a href="/tags/graphviz/" style="font-size: 11px;">graphviz</a> <a href="/tags/hexo/" style="font-size: 10px;">hexo</a> <a href="/tags/hosts/" style="font-size: 10px;">hosts</a> <a href="/tags/iscsi/" style="font-size: 14px;">iscsi</a> <a href="/tags/java/" style="font-size: 10px;">java</a> <a href="/tags/javascript/" style="font-size: 10px;">javascript</a> <a href="/tags/job/" style="font-size: 10px;">job</a> <a href="/tags/json/" style="font-size: 10px;">json</a> <a href="/tags/kernel/" style="font-size: 14px;">kernel</a> <a href="/tags/linux/" style="font-size: 14px;">linux</a> <a href="/tags/lisp/" style="font-size: 10px;">lisp</a> <a href="/tags/lua/" style="font-size: 10px;">lua</a> <a href="/tags/makefile/" style="font-size: 10px;">makefile</a> <a href="/tags/malloc/" style="font-size: 10px;">malloc</a> <a href="/tags/math/" style="font-size: 11px;">math</a> <a href="/tags/maxima/" style="font-size: 10px;">maxima</a> <a href="/tags/memory/" style="font-size: 11px;">memory</a> <a href="/tags/memory-overflow/" style="font-size: 10px;">memory overflow</a> <a href="/tags/mtrace/" style="font-size: 10px;">mtrace</a> <a href="/tags/netdisk/" style="font-size: 10px;">netdisk</a> <a href="/tags/network/" style="font-size: 20px;">network</a> <a href="/tags/others/" style="font-size: 18px;">others</a> <a href="/tags/pandoc/" style="font-size: 10px;">pandoc</a> <a href="/tags/performance/" style="font-size: 16px;">performance</a> <a href="/tags/person/" style="font-size: 11px;">person</a> <a href="/tags/protobuf/" style="font-size: 11px;">protobuf</a> <a href="/tags/python/" style="font-size: 10px;">python</a> <a href="/tags/rsync/" style="font-size: 10px;">rsync</a> <a href="/tags/sed/" style="font-size: 11px;">sed</a> <a href="/tags/shell/" style="font-size: 15px;">shell</a> <a href="/tags/skype/" style="font-size: 11px;">skype</a> <a href="/tags/sms/" style="font-size: 10px;">sms</a> <a href="/tags/source/" style="font-size: 11px;">source</a> <a href="/tags/ssh/" style="font-size: 10px;">ssh</a> <a href="/tags/stack/" style="font-size: 10px;">stack</a> <a href="/tags/storage/" style="font-size: 15px;">storage</a> <a href="/tags/study/" style="font-size: 10px;">study</a> <a href="/tags/svn/" style="font-size: 11px;">svn</a> <a href="/tags/sync/" style="font-size: 10px;">sync</a> <a href="/tags/test/" style="font-size: 11px;">test</a> <a href="/tags/time/" style="font-size: 10px;">time</a> <a href="/tags/tools/" style="font-size: 16px;">tools</a> <a href="/tags/valgrind/" style="font-size: 10px;">valgrind</a> <a href="/tags/vi/" style="font-size: 10px;">vi</a> <a href="/tags/vim/" style="font-size: 14px;">vim</a> <a href="/tags/virtual/" style="font-size: 11px;">virtual</a> <a href="/tags/wget/" style="font-size: 10px;">wget</a> <a href="/tags/windows/" style="font-size: 11px;">windows</a> <a href="/tags/wireshark/" style="font-size: 10px;">wireshark</a> <a href="/tags/write/" style="font-size: 13px;">write</a> <a href="/tags/xml/" style="font-size: 10px;">xml</a>
    </div>
  </div>

  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Archives</h3>
    <div class="widget">
      <ul class="archive-list"><li class="archive-list-item"><a class="archive-list-link" href="/archives/2016/07/">July 2016</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2016/04/">April 2016</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2016/03/">March 2016</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2016/02/">February 2016</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2016/01/">January 2016</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2015/11/">November 2015</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2015/10/">October 2015</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2015/09/">September 2015</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2015/08/">August 2015</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2015/07/">July 2015</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2015/06/">June 2015</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2015/03/">March 2015</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2015/02/">February 2015</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2015/01/">January 2015</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2014/12/">December 2014</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2014/11/">November 2014</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2014/09/">September 2014</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2014/08/">August 2014</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2014/07/">July 2014</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2014/06/">June 2014</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2014/05/">May 2014</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2014/04/">April 2014</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2014/03/">March 2014</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2013/11/">November 2013</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2013/10/">October 2013</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2013/09/">September 2013</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2013/08/">August 2013</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2013/07/">July 2013</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2013/06/">June 2013</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2013/05/">May 2013</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2013/04/">April 2013</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2013/03/">March 2013</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2013/02/">February 2013</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2013/01/">January 2013</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2012/12/">December 2012</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2012/09/">September 2012</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Articles récents</h3>
    <div class="widget">
      <ul>
        
          <li>
            <a href="/2016/07/17/how-to-implement-malloc/">如何实现一个malloc</a>
          </li>
        
          <li>
            <a href="/2016/07/17/study-grep-more/">grep工作原理</a>
          </li>
        
          <li>
            <a href="/2016/07/17/2016-04-13-malloc/">malloc</a>
          </li>
        
          <li>
            <a href="/2016/04/27/include-what-you-use/">使用IWYU整理头文件引用</a>
          </li>
        
          <li>
            <a href="/2016/04/24/understand-gcc-assembly-output/">understand gcc assembly output</a>
          </li>
        
      </ul>
    </div>
  </div>

  
</aside>
        
      </div>
      <footer id="footer">
  
  <div class="outer">
    <div id="footer-info" class="inner">
      &copy; 2016 Matrix207<br>
      Propulsé by <a href="http://hexo.io/" target="_blank">Hexo</a>
    </div>
  </div>
</footer>
    </div>
    <nav id="mobile-nav">
  
    <a href="/" class="mobile-nav-link">Home</a>
  
    <a href="/archives" class="mobile-nav-link">Archives</a>
  
</nav>
    

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>


  <link rel="stylesheet" href="/fancybox/jquery.fancybox.css">
  <script src="/fancybox/jquery.fancybox.pack.js"></script>


<script src="/js/script.js"></script>

  </div>
</body>
</html>